/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.ecommercer.dao;

import br.com.ecommercer.bean.Endereco;
import br.com.ecommercer.bean.Evento;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Petterson
 */
public class EventoDaoImp implements EventoDao {

    @Override
    public Object salvar(Object obj) throws Exception {
        Evento evento = (Evento) obj;
        PreparedStatement ps = null;
        Connection conn = null;

        try {
            String SQL = "INSERT INTO evento(nome,artista,estilo,descricao,dataEvento,total_ingresso,id_endereco) VALUES(?,?,?,?,?,?,?);";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);

            ps.setString(1, evento.getNome());
            ps.setString(2, evento.getArtista());
            ps.setString(3, evento.getEstilo());
            ps.setString(4, evento.getDescricao());
            ps.setDate(5, new java.sql.Date(evento.getDataEvento().getTime()));
            ps.setInt(6, evento.getTotalIngresso());
            ps.setInt(7, evento.getEndereco().getId());
            ps.executeUpdate();
        } catch (SQLException ex) {
            throw new Exception("Erro ao inserir evento" + ex.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
        return evento;
    }

    @Override
    public void alterar(Object obj) throws Exception {
        Evento evento = (Evento) obj;
        PreparedStatement ps = null;
        Connection conn = null;

        try {
            String SQL = "UPDATE evento SET nome = ?,artista = ?,estilo = ?,descricao = ?,dataEvento = ?, total_ingresso = ? WHERE id = ?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);

            ps.setString(1, evento.getNome());
            ps.setString(2, evento.getArtista());
            ps.setString(3, evento.getEstilo());
            ps.setString(4, evento.getDescricao());
            ps.setDate(5, new java.sql.Date(evento.getDataEvento().getTime()));
            ps.setInt(6, evento.getTotalIngresso());
            ps.setInt(7, evento.getId());

            ps.executeUpdate();
        } catch (SQLException ex) {
            throw new Exception("Erro ao alterar endereco" + ex.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
    }

    @Override
    public void excluir(int id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        try {
            String SQL = "DELETE FROM evento WHERE id = ?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, id);
            ps.executeUpdate();

        } catch (Exception ex) {
            throw new Exception("Erro ao excluir endereco" + ex.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
    }

    @Override
    public Object procurar(Integer id) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;
        Evento evento = null;
        Endereco endereco = null;
        try {
            String SQL = "SELECT * FROM evento ev INNER JOIN endereco en ON ev.id_endereco = en.id WHERE ev.id = ?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setInt(1, id);
            rs = ps.executeQuery();
            if (rs.next()) {
                evento = new Evento();
                evento.setId(rs.getInt("ev.id"));
                evento.setNome(rs.getString("nome"));
                evento.setArtista(rs.getString("artista"));
                evento.setEstilo(rs.getString("estilo"));
                evento.setDescricao(rs.getString("descricao"));
                evento.setTotalIngresso(rs.getInt("total_ingresso"));
                evento.setDataEvento(rs.getDate("dataEvento"));

                endereco = new Endereco();
                endereco.setId(rs.getInt("en.id"));
                endereco.setLocal(rs.getString("local"));
                endereco.setRua(rs.getString("rua"));
                endereco.setBairro(rs.getString("bairro"));
                endereco.setCidade(rs.getString("cidade"));
                endereco.setEstado(rs.getString("estado"));
                endereco.setCep(rs.getString("cep"));
                endereco.setCapacidadeMaxima(rs.getInt("capacidadeMaxima"));
                evento.setEndereco(endereco);
            }
        } catch (Exception ex) {
            throw new Exception("Erro ao procurar endereco" + ex.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
        return evento;

    }

    @Override
    public List<Object> listar() throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs;
        Evento evento = null;
        Endereco endereco = null;
        List eventos = new ArrayList();
        try {
            String SQL = "SELECT * FROM evento ev INNER JOIN endereco en ON ev.id_endereco = en.id";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            rs = ps.executeQuery();
            while (rs.next()) {
                evento = new Evento();
                evento.setId(rs.getInt("ev.id"));
                evento.setNome(rs.getString("nome"));
                evento.setArtista(rs.getString("artista"));
                evento.setEstilo(rs.getString("estilo"));
                evento.setDescricao(rs.getString("descricao"));
                evento.setDataEvento(rs.getDate("dataEvento"));
                evento.setTotalIngresso(rs.getInt("total_ingresso"));

                endereco = new Endereco();
                endereco.setId(rs.getInt("en.id"));
                endereco.setLocal(rs.getString("local"));
                endereco.setRua(rs.getString("rua"));
                endereco.setBairro(rs.getString("bairro"));
                endereco.setCidade(rs.getString("cidade"));
                endereco.setEstado(rs.getString("estado"));
                endereco.setCep(rs.getString("cep"));
                endereco.setCapacidadeMaxima(rs.getInt("capacidadeMaxima"));
                evento.setEndereco(endereco);
                eventos.add(evento);
            }
        } catch (Exception ex) {
            throw new Exception("Erro ao listar endereco" + ex.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
        return eventos;
    }

    @Override
    public List pesquisaNome(String nome) throws Exception {
        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs;
        Evento evento = null;
        Endereco endereco = null;
        List eventos = new ArrayList();
        try {
            String SQL = "SELECT * FROM evento ev JOIN endereco en ON ev.id_endereco = en.id WHERE ev.nome LIKE ?";
            conn = FabricaConexao.getConnection();
            ps = conn.prepareStatement(SQL);
            ps.setString(1, "%" + nome + "%");
            rs = ps.executeQuery();
            while (rs.next()) {
                evento = new Evento();
                evento.setId(rs.getInt("ev.id"));
                evento.setNome(rs.getString("nome"));
                evento.setArtista(rs.getString("artista"));
                evento.setEstilo(rs.getString("estilo"));
                evento.setDescricao(rs.getString("descricao"));
                evento.setDataEvento(rs.getDate("dataEvento"));
                evento.setTotalIngresso(rs.getInt("total_ingresso"));
                
                endereco = new Endereco();
                endereco.setId(rs.getInt("en.id"));
                endereco.setLocal(rs.getString("local"));
                endereco.setRua(rs.getString("rua"));
                endereco.setBairro(rs.getString("bairro"));
                endereco.setCidade(rs.getString("cidade"));
                endereco.setEstado(rs.getString("estado"));
                endereco.setCep(rs.getString("cep"));
                endereco.setCapacidadeMaxima(rs.getInt("capacidadeMaxima"));
                
                evento.setEndereco(endereco);
                eventos.add(evento);
            }
        } catch (Exception ex) {
            throw new Exception("Erro ao listar endereco" + ex.getMessage());
        } finally {
            FabricaConexao.closeConnection(conn, ps);
        }
        return eventos;
    }
}
